<?php
//TODO: CatalogWizard
/**
 * CatalogWizard
 * Класс для управления каталогом фирм и организаций
 * @package yarland.ru SVN localhost
 * @author Igor.Barkowsky@gmail.com
 * @copyright 2009
 * @version $Id$
 * @access public
 */
class CatalogWizard extends Wizard
{
	/** Таблица с основной информацией о фирмах
	 * @var string
	 */
	var $table = "firm_catalog";
	/** Префикс для таблиц с дополнительной информацией о фирмах
	 * @var string
	 */
	var $pfx = "firm_";
	/** Поле-ссылка на родительский ID в дополнительных таблицах
	 * @var string
	 */
	var $pid = "catalog_id";
	/** путь к папке, где лежат объекты (абсолютный или относительно корня)
	 * @var string
	 */
	var $obj_dir = "/upload/firm/";
	/** Таблица с адресами фирм
	 * @var string
	 */
	var $table_adresses;
	/** Таблица с товарами фирм
	 * @var string
	 */
	var $table_goods;
	/** Таблица с графиками фирм
	 * @var string
	 */
	var $table_grafik;
	/** Таблица с новостями фирм
	 * @var string
	 */
	var $table_news;
	/** Таблица с мнениями о фирмах
	 * @var string
	 */
	var $table_opinions;
	/** Таблица с пользовательскими страницами фирм
	 * @var string
	 */
	var $table_pages;
	/** Таблица с контактами фирм
	 * @var string
	 */
	var $table_phones;
	/** Таблица с фотографиями фирм
	 * @var string
	 */
	var $table_photoes;
	/** Таблица с прайс-листами фирм
	 * @var string
	 */
	var $table_prices;
	/** Таблица связей между фирмами и категориями
	 * @var string
	 */
	var $table_tree;
	/** Таблица с видеозаписями фирм
	 * @var string
	 */
	var $table_videos;
	/** Объект класса CatalogCategoryWizard для работы с категориями
	 * @var CatalogCategoryWizard
	 */
	var $cat;
	/** Объект класса UsersWizard для работы с зарегистрированными пользователями
	 * @var UsersWizard
	 */
	var $users;
	/** Объект класса GeoWizard для работы с адресами фирм
	 * @var GeoWizard
	 */
	var $geo;
	/** Массив с данными о корневой категории фирм
	 * @var array
	 */
	var $catalog_main_cat = array();
	/**
	 * CatalogWizard::__construct()
	 * 
	 * @param MyDB $db
	 * @param string $tablename
	 * @param string $pfx
	 * @param string $id
	 * @return void
	 */
	function __construct(MyDB $db,$tablename = '',$pfx = '',$id = '',$obj_dir = '')
	{
		$this->db = $db;
		if(strlen($tablename) > 0){$this->table = mysql_real_escape_string($tablename);}
		if(strlen($pfx) > 0){$this->pfx = mysql_real_escape_string($pfx);}
		if(strlen($id) > 0){$this->pid = $id;}
		if(strlen($obj_dir) > 0){$this->obj_dir = $obj_dir;}
		$this->table_adresses = $this->pfx.'adress';
		$this->table_goods = $this->pfx.'goods';
		$this->table_grafik = $this->pfx.'grafik';
		$this->table_news = $this->pfx.'news';
		$this->table_opinions = $this->pfx.'opinions';
		$this->table_pages = $this->pfx.'pages';
		$this->table_phones = $this->pfx.'phones';
		$this->table_photoes = $this->pfx.'photoes';
		$this->table_prices = $this->pfx.'prices';
		$this->table_tree = $this->pfx.'tree';
		$this->table_videos = $this->pfx.'videos';
		$this->cat = new CatalogCategoryWizard($this->db);
		$this->catalog_main_cat = $this->cat->byAlias('catalog','catalog');
		$this->users = new UsersWizard($this->db);
		$this->geo = new GeoWizard($this->db);
	}
	//TODO: CatalogWizard::getFirmById()
	function getFullInfoById($id = 0)
	{
		$item = $this->getItem($id);
		if($item != false)
		{
			$item_id = (int)$item['id'];
			//TODO: CatalogWizard::getFirmById()->Item->Adresses
			$item['adresses'] = $this->getAdresses($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Categories
			$item['categories'] = $this->getSpheres($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Goods
			$item['goods'] = $this->getGoods($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Grafik
			$item['grafik'] = $this->getGrafik($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->News
			$item['news'] = $this->getNews($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Opinions
			$item['opinions'] = $this->getOpinions($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Pages
			$item['pages'] = $this->getPages($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Phones
			$item['phones'] = $this->getPhones($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Photoes
			$item['photoes'] = $this->getPhotoes($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Prices
			$item['prices'] = $this->getPrices($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->Videos
			$item['videos'] = $this->getVideos($item_id);
			//TODO: CatalogWizard::getFirmById()->Item->link
			$item['link'] = '/catalog/'.$item['alias'].'/';
			//TODO: CatalogWizard::getFirmById()->Item->Logo
			if($item['logo'] == '1')
			{
				$item['logotype']['small'] = $this->obj_dir.$item['id'].'/logo_small.gif';
				$item['logotype']['med'] = $this->obj_dir.$item['id'].'/logo_med.gif';
				$item['logotype']['full'] = $this->obj_dir.$item['id'].'/logo.gif';
			}
			else
			{
				$item['logotype'] = false;
			}
			return $item;
		}
		else return false;
	}
	//TODO: CatalogWizard::getFirmByAlias()
	function getFullInfoByAlias($alias = '')
	{
		if(strlen($alias) > 0)
		{
			$item = array();
			$item = $this->db->fetch_one("SELECT * FROM $this->table WHERE alias = '".mysql_real_escape_string($alias)."'");
			if($item != false)
			{
				$item_id = intval($item['id']);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Adresses
				$item['adresses'] = $this->getAdresses($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Categories
				$item['categories'] = $this->getSpheres($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Goods
				$item['goods'] = $this->getGoods($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Grafik
				$item['grafik'] = $this->getGrafik($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->News
				$item['news'] = $this->getNews($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Opinions
				$item['opinions'] = $this->getOpinions($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Pages
				$item['pages'] = $this->getPages($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Phones
				$item['phones'] = $this->getPhones($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Photoes
				$item['photoes'] = $this->getPhotoes($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Prices
				$item['prices'] = $this->getPrices($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->Videos
				$item['videos'] = $this->getVideos($item_id);
				//TODO: CatalogWizard::getFirmByAlias()->Item->link
				$item['link'] = '/catalog/'.$item['alias'].'/';
				//TODO: CatalogWizard::getFirmByAlias()->Item->Logo
				if($item['logo'] == '1')
				{
					$item['logotype']['small'] = $this->obj_dir.$item['id'].'/logo_small.gif';
					$item['logotype']['med'] = $this->obj_dir.$item['id'].'/logo_med.gif';
					$item['logotype']['full'] = $this->obj_dir.$item['id'].'/logo.gif';
				}
				else
				{
					$item['logotype'] = false;
				}
				return $item;
			}
			else return false;
		}
		else return false;
	}
	function getAdresses($obj_id = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->geo->getFullAdressesForFirm($obj_id);
		}
		else return false;
	}
	function getSpheres($obj_id = 0)
	{
		if(intval($obj_id) != 0)
		{
			$catalog_categories = $this->db->fetch_list("SELECT ".$this->cat->pid." FROM $this->table_tree WHERE $this->pid = '".$obj_id."'");
			if(!empty($catalog_categories))
			{
				return array(
					'array' 	=> $this->cat->getCatArray($catalog_categories),
					'list' 		=> $catalog_categories
				);
			}
			else return false;
		}
		else return false;
	}
	function getGoods($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_goods WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
	function getGrafik($obj_id = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_grafik WHERE $this->pid = '".$obj_id."'");
		}
		else return false;
	}
	function getNews($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_news WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
	function getOpinions($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_opinions WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
	function getPages($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_pages WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
	function getPhones($obj_id = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_phones WHERE $this->pid = '".$obj_id."'");
		}
		else return false;
	}
	function getPhotoes($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_photoes WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
	function getPrices($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_prices WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
	function getVideos($obj_id = 0,$status = 0)
	{
		if(intval($obj_id) != 0)
		{
			return $this->db->fetch_array("SELECT * FROM $this->table_videos WHERE $this->pid = '".$obj_id."' AND status >= '".intval($status)."'");
		}
		else return false;
	}
}
?>